

package autocorrelacion;

import sun.reflect.generics.tree.Tree;



public class generadorLineal {
   private int semilla,c,a,m;
   private int periodo;
    double[] resultados;
    double mediaRacha;
    double varianza;
    

    public generadorLineal(int semilla, int c, int a, int m) {
        this.semilla = semilla;
        this.c = c;
        this.a = a;
        this.m = m;
        this.periodo=0;
        
       

        
    }
    
   void generarNumero (int iteraciones)
    {
        double  x1,x2;
        x1=semilla;
        resultados  = new double [iteraciones];
        resultados[0]=x1/m; // valor de R0
       
        for (int i = 1; i < iteraciones; i++)
        {
            x2=(a*x1+c)%m;
            resultados[i]= x2/m;
            x1=x2;

        }
    }
   void comprobar_periodo()
   {
       int aux1,aux2;
       aux1=this.c;
       aux2=this.m;
       boolean pmax=false;
      if((Math.log10(m)/Math.log10(2))%1==0) //comprobar que el modulo es potencia de 2
      {
        if(m%2==0 && c!=0) //M debe ser potencia de 2
       {
           if((mcd(aux1,aux2)==1))
           {
               if(((a-1)/4)%1==0)
               {
                    pmax=true;
                    periodo=m;
               }
           }

       }
       else
           if(m%2==0 && c==0)//M debe ser potencia de 2
      {
           if(semilla%2!=0)
           {
               if((((a-3)/8)%1==0)||(((a-5)/8)%1==0))
               {
                   pmax=true;
                   periodo=m/4;
               }
           }
       }
      }
      else{
           System.out.println("Modulo no es potencia de 2");
           System.exit(0);
      }
      
   }
   public long mcd (int a,int b) {
        if (b == 0) {return a;}
        else {return mcd (b,(a % b));}
    }
   void imprimir (){
       for (int i = 0; i < resultados.length; i++) {
           
           System.out.println("Iteracion: "+i+": "+resultados[i]);
       }
   }
   
   void mostrarperiodo(){
       System.out.println(periodo);
   }         
}
   
  
  
  
